<?php
/**
 * Get next Running no ตาม type
 * runno ในตารางเก็บ ลำดับถัดไปที่ยังไม่ได้ใช่
 *
 * มี Runing No 4 ประเภท คือ
 * 1. Customer => VMI001
 * 2. Site ขึ้นกับแต่ละ Customer มี 2 หลัก => 01
 * 3. Stock in no
 * 4. Stock out no
 *      Stock in และ out no ต้องระบุ
 *          - ปีเข้ามาเป็นปี พ.ศ. (ใช้จาก UtilityComponent::getThaiYear()
 *          - Customer_id ถ้าเป็น run no ของลูกค้า ไม่ต้องระบุถ้าเป็นของ ITS
 */
class RunningNo extends AppModel {
    var $name = 'RunningNo';

    // Its Stock in
    const STOCK_IN_TYPE = 'I';

    // Dispatch
    const STOCK_OUT_TYPE = 'O';

    // ITS Stock out (Return)
    const ITS_STOCK_OUT_TYPE = 'STO';

    const CUSTOMER_TYPE = 'C';

    const SITE_TYPE = 'S';

    const CUST_STOCK_OUT_RETURN_TYPE = 'OR';

    const CUST_RETURN_TYPE = 'CTR';

    const CUST_RESERVE_TYPE = 'RES';

    const DISPATCH_RETURN_TYPE = 'DSR';

    const SUPPLIER_DISPATCH = 'SD';

    const SUPPLIER_DISPATCH_RETURNS = 'SDR';

    const DELIVERY_RETURN = 'RTU';

    /**
     * @param String $type 'I', 'O'
     * @param int $year ระบุปี พ.ศ. เช่น 52, 53
     * @param int $customer_id null สำหรับ ITS
     * @param int $length จำนวนหลักของ Runing no
     * @return <type>
     */
    function getNextStockNo($type, $year, $customer_id = null, $length = 6) {
        $runningNo = $this->find('first', array(
                'fields' => array('id', 'runno'),
                'conditions' => array(
                    'RunningNo.type' => $type,
                    'RunningNo.year' => $year,
                    'RunningNo.customer_id' => $customer_id
                )
            )
        );

        // ถ้าไม่พบข้อมูลแสดงว่าขึ้นปีใหม่ insert ลงตาราง
        if (!$runningNo) {
            $this->data['RunningNo']['type'] = $type;
            $this->data['RunningNo']['year'] = $year;
            $this->data['RunningNo']['customer_id'] = $customer_id;
            // ในตารางเก็บอันดับถัดไป
            $this->data['RunningNo']['runno'] = 2;
            $this->save($this->data);
            return substr('000001', -$length);
        }
        $this->id = $runningNo['RunningNo']['id'];
        $this->saveField('runno', $runningNo['RunningNo']['runno'] + 1);
        return substr($runningNo['RunningNo']['runno'], -$length);
    }

    function getNextCustNo() {
        $runningNo = $this->find('first', array(
                'fields' => array('id', 'runno'),
                'conditions' => array(
                    'RunningNo.type' => self::CUSTOMER_TYPE,
                )
            )
        );

        // ถ้าไม่พบข้อมูลแสดงว่าขึ้นปีใหม่ insert ลงตาราง
        if (!$runningNo) {
            $this->data['RunningNo']['type'] = self::CUSTOMER_TYPE;
            // ในตารางเก็บอันดับถัดไป
            $this->data['RunningNo']['runno'] = 2;
            $this->save($this->data);
            return 'VMI001';
        }

        $this->id = $runningNo['RunningNo']['id'];
        $this->saveField('runno', $runningNo['RunningNo']['runno'] + 1);
        // runno 3 ตัวท้ายเท่านั้น
        return 'VMI' . substr($runningNo['RunningNo']['runno'], -3);
    }

    /**
     *
     * @param int $customer_id
     * @return string Site No (มีเลข 2 หลักเสมอ)
     */
    function getNextSiteNo($customer_id) {
        $runningNo = $this->find('first', array(
                'fields' => array('id', 'runno'),
                'conditions' => array(
                    'RunningNo.type' => self::SITE_TYPE,
                    'RunningNo.customer_id' => $customer_id,
                )
            )
        );

        // ถ้าไม่พบข้อมูลแสดงว่าขึ้นปีใหม่ insert ลงตาราง
        if (!$runningNo) {
            $this->data['RunningNo']['type'] = self::SITE_TYPE;
            $this->data['RunningNo']['customer_id'] = $customer_id;
            // ในตารางเก็บอันดับถัดไป
            $this->data['RunningNo']['runno'] = 2;
            $this->save($this->data);
            return '01';
        }

        $this->id = $runningNo['RunningNo']['id'];
        $this->saveField('runno', $runningNo['RunningNo']['runno'] + 1);
        // เอาเฉพาะ 2 ตัวท้าย
        return substr($runningNo['RunningNo']['runno'], -2);
    }


}
